home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / ip.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  6KB  |  221 lines

  1. /*
  2.  * INET        An implementation of the TCP/IP protocol suite for the LINUX
  3.  *        operating system.  INET is implemented using the  BSD Socket
  4.  *        interface as the means of communication with the user level.
  5.  *
  6.  *        Definitions for the IP protocol.
  7.  *
  8.  * Version:    @(#)ip.h    1.0.2    04/28/93
  9.  *
  10.  * Authors:    Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  11.  *
  12.  *        This program is free software; you can redistribute it and/or
  13.  *        modify it under the terms of the GNU General Public License
  14.  *        as published by the Free Software Foundation; either version
  15.  *        2 of the License, or (at your option) any later version.
  16.  */
  17. #ifndef _LINUX_IP_H
  18. #define _LINUX_IP_H
  19. #include <asm/byteorder.h>
  20.  
  21. #define IPTOS_TOS_MASK        0x1E
  22. #define IPTOS_TOS(tos)        ((tos)&IPTOS_TOS_MASK)
  23. #define    IPTOS_LOWDELAY        0x10
  24. #define    IPTOS_THROUGHPUT    0x08
  25. #define    IPTOS_RELIABILITY    0x04
  26. #define    IPTOS_MINCOST        0x02
  27.  
  28. #define IPTOS_PREC_MASK        0xE0
  29. #define IPTOS_PREC(tos)        ((tos)&IPTOS_PREC_MASK)
  30. #define IPTOS_PREC_NETCONTROL           0xe0
  31. #define IPTOS_PREC_INTERNETCONTROL      0xc0
  32. #define IPTOS_PREC_CRITIC_ECP           0xa0
  33. #define IPTOS_PREC_FLASHOVERRIDE        0x80
  34. #define IPTOS_PREC_FLASH                0x60
  35. #define IPTOS_PREC_IMMEDIATE            0x40
  36. #define IPTOS_PREC_PRIORITY             0x20
  37. #define IPTOS_PREC_ROUTINE              0x00
  38.  
  39.  
  40. /* IP options */
  41. #define IPOPT_COPY        0x80
  42. #define IPOPT_CLASS_MASK    0x60
  43. #define IPOPT_NUMBER_MASK    0x1f
  44.  
  45. #define    IPOPT_COPIED(o)        ((o)&IPOPT_COPY)
  46. #define    IPOPT_CLASS(o)        ((o)&IPOPT_CLASS_MASK)
  47. #define    IPOPT_NUMBER(o)        ((o)&IPOPT_NUMBER_MASK)
  48.  
  49. #define    IPOPT_CONTROL        0x00
  50. #define    IPOPT_RESERVED1        0x20
  51. #define    IPOPT_MEASUREMENT    0x40
  52. #define    IPOPT_RESERVED2        0x60
  53.  
  54. #define IPOPT_END    (0 |IPOPT_CONTROL)
  55. #define IPOPT_NOOP    (1 |IPOPT_CONTROL)
  56. #define IPOPT_SEC    (2 |IPOPT_CONTROL|IPOPT_COPY)
  57. #define IPOPT_LSRR    (3 |IPOPT_CONTROL|IPOPT_COPY)
  58. #define IPOPT_TIMESTAMP    (4 |IPOPT_MEASUREMENT)
  59. #define IPOPT_RR    (7 |IPOPT_CONTROL)
  60. #define IPOPT_SID    (8 |IPOPT_CONTROL|IPOPT_COPY)
  61. #define IPOPT_SSRR    (9 |IPOPT_CONTROL|IPOPT_COPY)
  62. #define IPOPT_RA    (20|IPOPT_CONTROL|IPOPT_COPY)
  63.  
  64. #define IPVERSION    4
  65. #define MAXTTL        255
  66. #define IPDEFTTL    64
  67.  
  68. #define IPOPT_OPTVAL 0
  69. #define IPOPT_OLEN   1
  70. #define IPOPT_OFFSET 2
  71. #define IPOPT_MINOFF 4
  72. #define MAX_IPOPTLEN 40
  73. #define IPOPT_NOP IPOPT_NOOP
  74. #define IPOPT_EOL IPOPT_END
  75. #define IPOPT_TS  IPOPT_TIMESTAMP
  76.  
  77. #define    IPOPT_TS_TSONLY        0        /* timestamps only */
  78. #define    IPOPT_TS_TSANDADDR    1        /* timestamps and addresses */
  79. #define    IPOPT_TS_PRESPEC    3        /* specified modules only */
  80.  
  81. #ifdef __KERNEL__
  82. #include <linux/config.h>
  83. #include <linux/types.h>
  84. #include <net/sock.h>
  85. #include <linux/igmp.h>
  86. #include <net/flow.h>
  87.  
  88. struct ip_options {
  89.   __u32        faddr;                /* Saved first hop address */
  90.   unsigned char    optlen;
  91.   unsigned char srr;
  92.   unsigned char rr;
  93.   unsigned char ts;
  94.   unsigned char is_setbyuser:1,            /* Set by setsockopt?            */
  95.                 is_data:1,            /* Options in __data, rather than skb    */
  96.                 is_strictroute:1,        /* Strict source route            */
  97.                 srr_is_hit:1,            /* Packet destination addr was our one    */
  98.                 is_changed:1,            /* IP checksum more not valid        */    
  99.                 rr_needaddr:1,            /* Need to record addr of outgoing dev    */
  100.                 ts_needtime:1,            /* Need to record timestamp        */
  101.                 ts_needaddr:1;            /* Need to record addr of outgoing dev  */
  102.   unsigned char router_alert;
  103.   unsigned char __pad1;
  104.   unsigned char __pad2;
  105.   unsigned char __data[0];
  106. };
  107.  
  108. #define optlength(opt) (sizeof(struct ip_options) + opt->optlen)
  109.  
  110. struct ipv6_pinfo;
  111.  
  112. struct inet_sock {
  113.     /* sk and pinet6 has to be the first two members of inet_sock */
  114.     struct sock        sk;
  115. #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
  116.     struct ipv6_pinfo    *pinet6;
  117. #endif
  118.     /* Socket demultiplex comparisons on incoming packets. */
  119.     __u32            daddr;        /* Foreign IPv4 addr */
  120.     __u32            rcv_saddr;    /* Bound local IPv4 addr */
  121.     __u16            dport;        /* Destination port */
  122.     __u16            num;        /* Local port */
  123.     __u32            saddr;        /* Sending source */
  124.     int            uc_ttl;        /* Unicast TTL */
  125.     int            tos;        /* TOS */
  126.     unsigned           cmsg_flags;
  127.     struct ip_options    *opt;
  128.     __u16            sport;        /* Source port */
  129.     unsigned char        hdrincl;    /* Include headers ? */
  130.     __u8            mc_ttl;        /* Multicasting TTL */
  131.     __u8            mc_loop;    /* Loopback */
  132.     __u8            pmtudisc;
  133.     __u16            id;        /* ID counter for DF pkts */
  134.     unsigned        recverr : 1,
  135.                 freebind : 1;
  136.     int            mc_index;    /* Multicast device index */
  137.     __u32            mc_addr;
  138.     struct ip_mc_socklist    *mc_list;    /* Group array */
  139.     /*
  140.      * Following members are used to retain the infomation to build
  141.      * an ip header on each ip fragmentation while the socket is corked.
  142.      */
  143.     struct {
  144.         unsigned int        flags;
  145.         unsigned int        fragsize;
  146.         struct ip_options    *opt;
  147.         struct rtable        *rt;
  148.         int            length; /* Total length of all frames */
  149.         u32            addr;
  150.         struct flowi        fl;
  151.     } cork;
  152. };
  153.  
  154. #define IPCORK_OPT    1    /* ip-options has been held in ipcork.opt */
  155.  
  156. static inline struct inet_sock *inet_sk(const struct sock *sk)
  157. {
  158.     return (struct inet_sock *)sk;
  159. }
  160.  
  161. static inline void __inet_sk_copy_descendant(struct sock *sk_to,
  162.                          const struct sock *sk_from,
  163.                          const int ancestor_size)
  164. {
  165.     memcpy(inet_sk(sk_to) + 1, inet_sk(sk_from) + 1,
  166.            sk_from->sk_prot->slab_obj_size - ancestor_size);
  167. }
  168. #if !(defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE))
  169. static inline void inet_sk_copy_descendant(struct sock *sk_to,
  170.                        const struct sock *sk_from)
  171. {
  172.     __inet_sk_copy_descendant(sk_to, sk_from, sizeof(struct inet_sock));
  173. }
  174. #endif
  175. #endif
  176.  
  177. struct iphdr {
  178. #if defined(__LITTLE_ENDIAN_BITFIELD)
  179.     __u8    ihl:4,
  180.         version:4;
  181. #elif defined (__BIG_ENDIAN_BITFIELD)
  182.     __u8    version:4,
  183.           ihl:4;
  184. #else
  185. #error    "Please fix <asm/byteorder.h>"
  186. #endif
  187.     __u8    tos;
  188.     __u16    tot_len;
  189.     __u16    id;
  190.     __u16    frag_off;
  191.     __u8    ttl;
  192.     __u8    protocol;
  193.     __u16    check;
  194.     __u32    saddr;
  195.     __u32    daddr;
  196.     /*The options start here. */
  197. };
  198.  
  199. struct ip_auth_hdr {
  200.     __u8  nexthdr;
  201.     __u8  hdrlen;        /* This one is measured in 32 bit units! */
  202.     __u16 reserved;
  203.     __u32 spi;
  204.     __u32 seq_no;        /* Sequence number */
  205.     __u8  auth_data[0];    /* Variable len but >=4. Mind the 64 bit alignment! */
  206. };
  207.  
  208. struct ip_esp_hdr {
  209.     __u32 spi;
  210.     __u32 seq_no;        /* Sequence number */
  211.     __u8  enc_data[0];    /* Variable len but >=8. Mind the 64 bit alignment! */
  212. };
  213.  
  214. struct ip_comp_hdr {
  215.     __u8 nexthdr;
  216.     __u8 flags;
  217.     __u16 cpi;
  218. };
  219.  
  220. #endif    /* _LINUX_IP_H */
  221.